/*     */ package com.zimbra.cs.index;
/*     */ 
/*     */ import com.zimbra.common.service.ServiceException;
/*     */ import java.io.IOException;
/*     */ import java.util.LinkedList;
/*     */ import java.util.List;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public abstract class BufferingResultsGrouper
/*     */   implements ZimbraQueryResults
/*     */ {
/*     */   protected final ZimbraQueryResults hits;
/*  32 */   protected List<ZimbraHit> bufferedHit = new LinkedList();
/*  33 */   protected boolean atStart = true;
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */   protected abstract boolean bufferHits()
/*     */     throws ServiceException;
/*     */   
/*     */ 
/*     */ 
/*     */   public SortBy getSortBy()
/*     */   {
/*  45 */     return this.hits.getSortBy();
/*     */   }
/*     */   
/*     */   public BufferingResultsGrouper(ZimbraQueryResults hits) {
/*  49 */     this.hits = hits;
/*     */   }
/*     */   
/*     */   public long getCursorOffset()
/*     */   {
/*  54 */     return this.hits.getCursorOffset();
/*     */   }
/*     */   
/*     */   public void resetIterator() throws ServiceException
/*     */   {
/*  59 */     if (!this.atStart) {
/*  60 */       this.bufferedHit.clear();
/*  61 */       this.hits.resetIterator();
/*  62 */       this.atStart = true;
/*     */     }
/*     */   }
/*     */   
/*     */   public boolean hasNext() throws ServiceException
/*     */   {
/*  68 */     return bufferHits();
/*     */   }
/*     */   
/*     */   public ZimbraHit peekNext() throws ServiceException
/*     */   {
/*  73 */     if (bufferHits()) {
/*  74 */       return (ZimbraHit)this.bufferedHit.get(0);
/*     */     }
/*  76 */     return null;
/*     */   }
/*     */   
/*     */   public ZimbraHit skipToHit(int hitNo)
/*     */     throws ServiceException
/*     */   {
/*  82 */     resetIterator();
/*  83 */     for (int i = 0; i < hitNo; i++) {
/*  84 */       if (!hasNext()) {
/*  85 */         return null;
/*     */       }
/*  87 */       getNext();
/*     */     }
/*  89 */     return getNext();
/*     */   }
/*     */   
/*     */   public ZimbraHit getNext() throws ServiceException
/*     */   {
/*  94 */     this.atStart = false;
/*  95 */     if (bufferHits()) {
/*  96 */       return (ZimbraHit)this.bufferedHit.remove(0);
/*     */     }
/*  98 */     return null;
/*     */   }
/*     */   
/*     */   public void close()
/*     */     throws IOException
/*     */   {
/* 104 */     this.hits.close();
/*     */   }
/*     */   
/*     */   public List<QueryInfo> getResultInfo()
/*     */   {
/* 109 */     return this.hits.getResultInfo();
/*     */   }
/*     */   
/*     */   public boolean isPreSorted()
/*     */   {
/* 114 */     return this.hits.isPreSorted();
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/index/BufferingResultsGrouper.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */